Use window.buildbucket and update BUILD Bug: 1228935 Change-Id: I905eefb5278e4ec735959201781f719aba743c8d
diff --git a/BUILD b/BUILD index a9d2875..9075eed 100644 --- a/BUILD +++ b/BUILD 
@@ -1,4 +1,4 @@ -load("@npm_bazel_rollup//:index.bzl", "rollup_bundle") +load("@npm//@bazel/rollup:index.bzl", "rollup_bundle")  load("//tools/bzl:js.bzl", "polygerrit_plugin")  load("//tools/bzl:plugin.bzl", "gerrit_plugin")  load("//tools/bzl:junit.bzl", "junit_tests") 
diff --git a/package-lock.json b/package-lock.json index d4d911b..ffacc29 100644 --- a/package-lock.json +++ b/package-lock.json 
@@ -10,6 +10,7 @@  "@polymer/polymer": "^3.4.1",  "@webcomponents/shadycss": "^1.10.2",  "@webcomponents/webcomponentsjs": "^2.5.0", + "buildbucket": "git+https://chromium.googlesource.com/infra/gerrit-plugins/buildbucket.git",  "es6-promise": "^4.2.8",  "eslint": "^7.27.0",  "eslint-config-google": "^0.14.0", @@ -2932,6 +2933,12 @@  "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",  "dev": true  }, + "node_modules/buildbucket": { + "name": "cr-buildbucket-plugin", + "resolved": "git+https://chromium.googlesource.com/infra/gerrit-plugins/buildbucket.git#ecc15da503d38c0fcdb9ba7cda79fb3b5ef4deaf", + "dev": true, + "license": "Apache-2.0" + },  "node_modules/busboy": {  "version": "0.2.14",  "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.2.14.tgz", @@ -22002,6 +22009,11 @@  "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",  "dev": true  }, + "buildbucket": { + "version": "git+https://chromium.googlesource.com/infra/gerrit-plugins/buildbucket.git#ecc15da503d38c0fcdb9ba7cda79fb3b5ef4deaf", + "dev": true, + "from": "buildbucket@git+https://chromium.googlesource.com/infra/gerrit-plugins/buildbucket.git" + },  "busboy": {  "version": "0.2.14",  "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.2.14.tgz", 
diff --git a/package.json b/package.json index 1e49050..d02ff2e 100644 --- a/package.json +++ b/package.json 
@@ -19,6 +19,7 @@  "@polymer/iron-test-helpers": "^3.0.1",  "@webcomponents/shadycss": "^1.10.2",  "@webcomponents/webcomponentsjs": "^2.5.0", + "buildbucket": "git+https://chromium.googlesource.com/infra/gerrit-plugins/buildbucket.git",  "es6-promise": "^4.2.8",  "eslint": "^7.27.0",  "eslint-config-google": "^0.14.0", 
diff --git a/static/buildbucket-client.js b/static/buildbucket-client.js deleted file mode 100644 index 5d105e8..0000000 --- a/static/buildbucket-client.js +++ /dev/null 
@@ -1,91 +0,0 @@ -/** @license - * Copyright 2019 The Chromium Authors. All rights reserved. - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -import {getAccessToken} from './auth.js'; - -/** - * Client for Buildbucket v2 API. - * Requests and responses to and from the RPC methods are defined in - * https://chromium.googlesource.com/infra/luci/luci-go/+/HEAD/buildbucket/proto/rpc.proto - * For more help see: - * https://goto.google.com/buildbucket-rpc - */ -class BuildbucketV2Client { - constructor(host) { - this.host = host; - } - - /** - * Calls a Buildbucket v2 API method. - * - * @param {string} method RPC service method name, e.g. "SearchBuilds". - * @param {Object} request Request body. - * @return {Object} Response body. - */ - async _call(method, request) { - // Miniature implementation of pRPC protocol with JSONPB and auth. - const headers = { - 'accept': 'application/json', - 'content-type': 'application/json', - }; - const accessToken = await this._getAccessToken(); - if (accessToken) { - headers.authorization = `Bearer ${accessToken}`; - } - - const url = `https://${this.host}/prpc/buildbucket.v2.Builds/${method}`; - const response = await fetch(url, { - method: 'POST', - headers, - body: JSON.stringify(request), - }); - if (!response.ok) { - throw new Error('Buildbucket request failed'); - } - - const rawResponseText = await response.text(); - const xssiPrefix = ')]}\''; - if (!rawResponseText.startsWith(xssiPrefix)) { - throw new Error( - `Response body does not start with XSSI prefix: ${xssiPrefix}`); - } - return JSON.parse(rawResponseText.substr(xssiPrefix.length)); - } - - /** - * Executes a SearchBuilds request. - * - * @param {SearchBuildsRequest} request An Object conforming to - * SearchBuildsRequest. - * @return {Promise<SearchBuildsResponse>} Resolves to SearchBuildsResponse. - */ - searchBuilds(request) { - return this._call('SearchBuilds', request); - } - - /** - * Executes a ScheduleBuild request. - * - * @param {ScheduleBuildRequest} request An Object conforming to - * ScheduleBuildRequest. - * @return {Promise<Build>} Resolves to Build. - */ - scheduleBuild(request) { - return this._call('ScheduleBuild', request); - } - - /** - * Mockable equivalent of auth.js#getAccessToken. - * - * @return {string} The bearer access token for authenticated requests. - */ - _getAccessToken() { - return getAccessToken(); - } -} - -export {BuildbucketV2Client}; - 
diff --git a/static/chromium-binary-size-view.js b/static/chromium-binary-size-view.js index 85b6c99..47d421c 100644 --- a/static/chromium-binary-size-view.js +++ b/static/chromium-binary-size-view.js 
@@ -6,8 +6,6 @@    import {htmlTemplate} from './chromium-binary-size-view_html.js';   -import {BuildbucketV2Client} from './buildbucket-client.js'; -  const DEFAULT_UPDATE_INTERVAL_MS = 1000 * 15;  const MAX_UPDATE_INTERVAL_MS = 1000 * 60 * 5;   @@ -142,6 +140,10 @@  if (!this._pluginConfig || !this._enabled) {  return;  } + if (!window.buildbucket) { + console.error('The "chromium-binary-size" plugin requires the' + + '"buildbucket" plugin for searching builds. Please activate both.'); + }    const newBinarySizeInfo = await this._tryGetNewBinarySizeInfo();  if (newBinarySizeInfo != null) { @@ -250,7 +252,7 @@  return [];  }  try { - const bb = new BuildbucketV2Client(BUILDBUCKET_HOST); + const bb = new window.buildbucket.BuildbucketV2Client(BUILDBUCKET_HOST);  const props_filter = 'builds.*.output.properties.fields.binarySizePlugin,'  + 'builds.*.endTime,builds.*.startTime';   @@ -358,7 +360,7 @@  return;  }  try { - const bb = new BuildbucketV2Client(BUILDBUCKET_HOST); + const bb = new window.buildbucket.BuildbucketV2Client(BUILDBUCKET_HOST);    await bb.scheduleBuild({  builder: { 
diff --git a/test/chromium-binary-size-view_test.html b/test/chromium-binary-size-view_test.html index 84facb2..3dfe67d 100644 --- a/test/chromium-binary-size-view_test.html +++ b/test/chromium-binary-size-view_test.html 
@@ -18,7 +18,7 @@    <script type="module">  import './common-test-setup.js'; -import {BuildbucketV2Client} from '../static/buildbucket-client.js'; +import {BuildbucketV2Client} from './common-test-setup.js';  import '../static/chromium-binary-size-view.js';    suite('chromium-binary-size-view basic tests', () => { @@ -56,6 +56,10 @@  _number: 1,  },  }); + window.buildbucket = { + getAccessToken: async () => null, + BuildbucketV2Client, + };  sandbox = sinon.sandbox.create();    }); 
diff --git a/test/common-test-setup.js b/test/common-test-setup.js index b3f244e..76da260 100644 --- a/test/common-test-setup.js +++ b/test/common-test-setup.js 
@@ -47,3 +47,5 @@  import '../node_modules/polymer-bridges/polymer/lib/legacy/mutable-data-behavior_bridge.js';  import '../node_modules/polymer-bridges/polymer/polymer-legacy_bridge.js';  import '@polymer/iron-test-helpers/iron-test-helpers.js'; + +export {BuildbucketV2Client} from '../node_modules/buildbucket/src/main/resources/static/buildbucket-client.js'